﻿#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <math.h>

typedef double Real;

typedef struct Point_s
{
	Real x;
	Real y;
}Point;

typedef struct TContext_s
{
	int n;
	Point v[3];
}TContext;

TContext context;

Point read_point()
{
	Point a;
	scanf("%lf %lf", &a.x, &a.y);
	return a;
}

void read_data(TContext* ctx)
{
	ctx->n = 3;
	for (int i = 0; i < ctx->n; ++i)
	{
		ctx->v[i] = read_point();
	}
}

Real dist2(Point*a,Point*b)
{
	Real dx = b->x - a->x;
	Real dy = b->y - a->y;
	return sqrt(dx * dx + dy * dy);
}

void do_task(TContext* ctx)
{
	Real a, b, c;
	a = dist2(ctx->v, ctx->v + 1);
	b = dist2(ctx->v+2, ctx->v + 1);
	c = dist2(ctx->v, ctx->v + 2);
	if (a + b > c&& a + c > b&& b + c > a)
	{
		Real s = (a + b + c) / 2;
		printf("L = %.2f, A = %.2f\n", s*2, sqrt(s*(s-a)*(s-b)*(s-c)));
	}else
	{
		printf("Impossible\n");
	}
}

void solve(TContext* ctx)
{
	read_data(ctx);
	do_task(ctx);
}

int main()
{
	freopen("D:/Develop/GitRepos/MOOC/浙江大学/数据结构/201906/DataStructure/M2019秋C入门和进阶练习集/7-108.txt", "r", stdin);
	solve(&context);
	return 0;
}
